/*
 * Usuario.java
 *
 * Created on November 4, 2007, 11:16 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package entity;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author Usuario
 */
public class Usuario {
    private Integer idUsuario;
    private Sistema sistema;
    private String senhaUsuario;
    private String nomeUsuario;
    private String loginUsuario;
    private BigDecimal raUsuuario;
    private String emailUsuario;
    private Calendar dataCadastro;
    private BigDecimal telefoneUsuario; 
    private String observacaoUsuario;
    private TipoUsuario tipoUsuario;
    private Set eventos = new HashSet();
    private Set arquivos = new HashSet();
    private Set grupos = new HashSet();
    private Set mensagensRecebidas = new HashSet();
    private Set mensagensEnviadas = new HashSet();
    
    //TODO corrigir implementacao do equals
    
    
    
    /** Creates a new instance of Usuario */
    public Usuario() {
        dataCadastro = Calendar.getInstance();
    }
    
    
    /**
     * Construtor com atributos obrigatorios
     * @param tipoUsuario
     * @param nomeUsuario
     * @param senha
     * @param login
     */
    public Usuario(TipoUsuario tipoUsuario, String nomeUsuario, String senha, 
            String login) {
        this.tipoUsuario = tipoUsuario;
        this.nomeUsuario = nomeUsuario;
        this.senhaUsuario = senha;
        this.loginUsuario = login;
        dataCadastro = Calendar.getInstance();        
    }


    public boolean equals(Object obj) {
        if (!(obj instanceof Usuario)) {
            return false;            
        }
        final Usuario other = (Usuario) obj;
        if (other.getSistema() != null && this.sistema != null) {
            if (other.getNomeUsuario().equalsIgnoreCase(this.nomeUsuario)) {
                return true;
            } else {
                return false;
            }            
        } else {
           if (other.getSistema() == null && this.sistema == null) {
               if (other.getNomeUsuario().equalsIgnoreCase(this.nomeUsuario) &&
                       other.getRaUsuario().equals(this.raUsuuario)) {
                   return true;
               } else {
                   return false;
               }               
           }
           return false;
        }
    }
    
    public void addGrupo(Grupo grupo) {
        this.grupos.add(grupo);
        grupo.getUsuarios().add(this);
    }
    

    public int hashCode() {
        return this.nomeUsuario.hashCode() * 17;
    }
    
    public String toString() {
        return "idUsuario: " + idUsuario + 
                "\nnomeUsuario: " + nomeUsuario;
             
    }

    public Integer getIdUsuario() {
        return idUsuario;
    }

    private void setIdUsuario(Integer idUsuario) {
        this.idUsuario = idUsuario;
    }

    public Sistema getSistema() {
        return sistema;
    }

    public void setSistema(Sistema sistema) {
        this.sistema = sistema;
    }

    public String getNomeUsuario() {
        return nomeUsuario;
    }

    public void setNomeUsuario(String nomeUsuario) {
        this.nomeUsuario = nomeUsuario;
    }

    public BigDecimal getRaUsuario() {
        return raUsuuario;
    }

    public void setRaUsuario(BigDecimal raUsuario) {
        this.raUsuuario = raUsuario;
    }

    public String getEmailUsuario() {
        return emailUsuario;
    }

    public void setEmailUsuario(String emailUsuario) {
        this.emailUsuario = emailUsuario;
    }

    public BigDecimal getTelefoneUsuario() {
        return telefoneUsuario;
    }

    public void setTelefoneUsuario(BigDecimal telefoneUsuario) {
        this.telefoneUsuario = telefoneUsuario;
    }
   
    public String getObservacaoUsuario() {
        return observacaoUsuario;
    }

    public void setObservacaoUsuario(String observacaoUsuario) {
        this.observacaoUsuario = observacaoUsuario;
    }

    public TipoUsuario getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(TipoUsuario tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }

    public Set getEventos() {
        return eventos;
    }

    public void setEventos(Set eventos) {
        this.eventos = eventos;
    }

    public Set getArquivos() {
        return arquivos;
    }

    public void setArquivos(Set arquivos) {
        this.arquivos = arquivos;
    }

    public Set getGrupos() {
        return grupos;
    }

    public void setGrupos(Set grupos) {
        this.grupos = grupos;
    }

    public Set getMensagensRecebidas() {
        return mensagensRecebidas;
    }

    public void setMensagensRecebidas(Set mensagensRecebidas) {
        this.mensagensRecebidas = mensagensRecebidas;
    }

    public Set getMensagensEnviadas() {
        return mensagensEnviadas;
    }

    public void setMensagensEnviadas(Set mensagensEnviadas) {
        this.mensagensEnviadas = mensagensEnviadas;
    }

    public String getLoginUsuario() {
        return loginUsuario;
    }

    public void setLoginUsuario(String loginUsuario) {
        this.loginUsuario = loginUsuario;
    }

    public String getSenhaUsuario() {
        return senhaUsuario;
    }

    public void setSenhaUsuario(String senhaUsuario) {
        this.senhaUsuario = senhaUsuario;
    }

    public Calendar getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Calendar dataCadastro) {
        this.dataCadastro = dataCadastro;
    }
    
}
